package com.wanger.swa;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.wanger.swc.util.json.MyJson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * @Author: wanger
 * @Date: 2024/9/10 21:28
 * @Description: sw
 */
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.wanger.*"})
public class SWApplication {
    public static void main(String[] args) {
        // 待处理任务：

        // TODO: 2025/7/10 15:16 修复数据库验证成功，但又无法使用问题

        // TODO: 2025/7/10 15:17 构建时选择数据库需添加数据库可用性验证

        // TODO: 2025/3/10 21:19 添加打包为zip时加入压缩功能

        // TODO: 2025/2/22 23:59 集成spring-security-oauth2 完善用户，角色，权限体系，需支持配置 ，打包为桌面应用时，取消该认证体系

        // TODO: 2025/3/10 15:12 处于模板编辑页面/预览页面 时关闭浏览器页面需弹窗确认，否则无法关闭

        // TODO: 2025/2/19 9:11 异常溯源

        // TODO: 2025/2/24 9:48 构建记录的【详情查询/删除】功能实现，在详情查询里面可以重新构建

        // TODO: 2025/2/18 21:41 公共模板功能实现，公共模板的入参全部从动态字段入参

        // TODO: 2025/2/7 10:38 选择表时需手动指定主键字段【先根据数据库自动回显，没有回显上的手动选择】

        // TODO: 2025/3/2 21:56 引入spring boot security + jwt，权限系统，启动时自动扫描api值内存，然后数据有用户-角色-权限-功能-uri关系

        // TODO: 2024/12/22 23:12 公共字段：id，创建者，创建时间，修改者，修改时间，逻辑删除，版本号

        long l = System.currentTimeMillis();//开始计时
        printInfo(SpringApplication.run(SWApplication.class, args));
        log.info("启动用时【{}】", DateUtil.formatBetween(System.currentTimeMillis() - l));//打印用时
    }

    private static void printInfo(ConfigurableApplicationContext context) {
        log.info("******************************************************************************************");
        ConfigurableEnvironment environment = context.getEnvironment();
        log.info("启动【{}】成功！", environment.getProperty("swagger.title", "请配置:swagger.title"));
        String path = getPath(environment);
        if (environment.getProperty("swagger.enabled", Boolean.class, Boolean.FALSE)) {
            log.info("swagger访问地址【{}/doc.html】", path);
        }
        log.info("系统访问地址【{}】", path);
    }

    private static String getPath(ConfigurableEnvironment environment) {
        return StrUtil.format("http://{host}{contextPath}",
                MyJson.map()
                        .pu("host", environment.getProperty("swagger.host", "请配置:swagger.host"))
                        .pu("contextPath", environment.getProperty("server.servlet.context-path", "请配置:server.servlet.context-path")));
    }
}